//
//  CorePlayStatus.swift
//  VideoPlayer
//
//  Created by JY_NEW on 2021/10/12.
//

import Foundation

/// 当前播放状态
public enum CorePlayerStatus: Equatable {
    /// 未播放
    case stoped(StopedContext)
    /// 暂停中(若播放中间卡住缓存也属于播放中)
    case paused
    /// 播放中
    case playing(PlayingContext)
}
extension CorePlayerStatus {
    /// 未播放状态上下文
    public enum StopedContext {
        /// 未加载链接
        case unload
        /// 准备中
        case preparing
        /// 播放完成
        case finished
        /// 用户退出
        case exited
        /// 播放出错
        case error
    }
    /// 播放状态上下文
    public enum PlayingContext {
        /// 正常播放
        case good
        /// 准备中，准备完成自动播放
        case preparing
        /// 卡住(缓存中)
        case stalled
        /// 正在跳转
        case seeking
    }
}
extension CorePlayerStatus {
    /// 是否准备中
    public var isPreparing: Bool {
        switch self {
        case let .stoped(context): return context == .preparing
        case let .playing(context): return context == .preparing
        default: return false
        }
    }
    /// 是否停止播放
    public var isStoped: Bool {
        switch self {
        case .stoped(_): return true
        default: return false
        }
    }
    /// 是否准备中且不播放
    public var isPreparingWithoutPlay: Bool {
        switch self {
        case let .stoped(context): return context == .preparing
        default: return false
        }
    }
    /// 是否未加载
    public var isUnload: Bool {
        switch self {
        case let .stoped(context): return context == .unload
        default: return false
        }
    }
    /// 是否播放结束
    public var isFinished: Bool {
        switch self {
        case let .stoped(context): return context == .finished
        default: return false
        }
    }
    /// 是否播放中断
    public var isExited: Bool {
        switch self {
        case let .stoped(context): return context == .exited
        default: return false
        }
    }
    /// 是否播放出错
    public var isError: Bool {
        switch self {
        case let .stoped(context): return context == .error
        default: return false
        }
    }
    /// 是否暂停中
    public var isPaused: Bool {
        return self == .paused
    }
    /// 是否正在播放
    public var isPlaying: Bool {
        switch self {
        case .playing(_): return true
        default: return false
        }
    }
    /// 是否准备中且准备完成立即播放
    public var isPreparingWithPlay: Bool {
        switch self {
        case let .playing(context): return context == .preparing
        default: return false
        }
    }
    /// 是否正在流畅播放中
    public var isPlayingSmoothly: Bool {
        switch self {
        case let .playing(context): return context == .good
        default: return false
        }
    }
    /// 是否正在缓冲中
    public var isBuffering: Bool {
        switch self {
        case let .playing(context): return context != .good
        default: return false
        }
    }
    /// 是否正在跳转中
    public var isSeeking: Bool {
        switch self {
        case let .playing(context): return context == .seeking
        default: return false
        }
    }
}
